package main

import (
	"fmt"
	"log"
	"sort"
)

// 切片的操作练习

func main() {
	// 定义一个切片 名字 类型
	var list_1 []int
	fmt.Println(list_1)
	var list_2 []string
	fmt.Println(list_2)
	// 声明一个切片并初始化
	var list = []int{1, 2, 3, 4}
	list = append(list, 1)
	fmt.Println(list)
	/*切片的赋值和拷贝问题*/
	// 赋值操作 指向同一个内存地址，一改都改
	a := []int{1, 2, 3, 4, 5}
	b := a
	b[0] = 100
	fmt.Println(a, b)

	// copy 操作,新建了一个，操作新的 不会影响旧的
	c := make([]int, 5)
	copy(c, a)
	fmt.Println(c)
	fmt.Println(a)
	c[0] = 10
	fmt.Println(c)
	fmt.Println(a)

	// append 追加
	// 追加一个切片，需要注意 ...
	a = append(a, c...)
	fmt.Println("追加切片之后的a: ", a)
	// 追加一个数字
	a = append(a, 99)
	fmt.Println("追加99的a: ", a)

	/*
		切片没有删除元素的操作，自己可以实现一个简单版本
	*/
	a = a[2:]
	fmt.Println("删除前俩元素", a)
	a = a[:8]
	fmt.Println("删除最后一个元素", a)

	// 删除中间的，需要借助append 实现
	a = append(a[:3], a[4:]...)
	fmt.Println("删除元素10", a)

	/*简单的排序使用*/
	sort.Ints(a)
	fmt.Println("排序后的a", a)
	log.Println(a)

}
